From 7f4b7c48e87313dc1be4f4895e182a58e8c55af7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Sat, 19 Jan 2019 18:32:00 +0100 Subject: [PATCH] cssparser: Make _gtk_css_parser_try a macro We almost always pass a constant string to it, so use a macro and try to trick the compiler into evaluating the 2(!) strlen() calls at compile time. --- gtk/gtkcssparser.c | 11 ++++++----- gtk/gtkcssparserprivate.h | 4 +++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/gtk/gtkcssparser.c b/gtk/gtkcssparser.c index a840d9fbbd..43d6699d03 100644 --- a/gtk/gtkcssparser.c +++ b/gtk/gtkcssparser.c @@ -298,17 +298,18 @@ _gtk_css_parser_skip_whitespace (GtkCssParser *parser) } gboolean -_gtk_css_parser_try (GtkCssParser *parser, - const char *string, - gboolean skip_whitespace) +gtk_css_parser_try_len (GtkCssParser *parser, + const char *string, + gsize string_len, + gboolean skip_whitespace) { g_return_val_if_fail (GTK_IS_CSS_PARSER (parser), FALSE); g_return_val_if_fail (string != NULL, FALSE); - if (g_ascii_strncasecmp (parser->data, string, strlen (string)) != 0) + if (g_ascii_strncasecmp (parser->data, string, string_len) != 0) return FALSE; - parser->data += strlen (string); + parser->data += string_len; if (skip_whitespace) _gtk_css_parser_skip_whitespace (parser); diff --git a/gtk/gtkcssparserprivate.h b/gtk/gtkcssparserprivate.h index 5bc2ad691b..3fb30f9136 100644 --- a/gtk/gtkcssparserprivate.h +++ b/gtk/gtkcssparserprivate.h @@ -66,8 +66,10 @@ gboolean _gtk_css_parser_is_string (GtkCssParser *parser * however is fine to call if you don’t know yet if the token is a foo or a bar, * you can _try_bar() if try_foo() failed. */ -gboolean _gtk_css_parser_try (GtkCssParser *parser, +#define _gtk_css_parser_try(p, s, skip) (gtk_css_parser_try_len (p, s, strlen(s), skip)) +gboolean gtk_css_parser_try_len (GtkCssParser *parser, const char *string, + gsize string_len, gboolean skip_whitespace); char * _gtk_css_parser_try_ident (GtkCssParser *parser, gboolean skip_whitespace); -- 2.30.2